home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 176-200 / disk_177 / marge / marge.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  101 lines

  1. /*
  2.  *  marge.c : program to add a margin on the front of every line
  3.  *            in a file.
  4.  *
  5.  *     by Joel Swank 9/21/88
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <fcntl.h>
  10. #include <ctype.h>
  11.  
  12. char linebuf[500];
  13. int filecnt = 0;
  14. FILE *in, *out;
  15. char pad = '\t';    /* default pad cahracter is tab */
  16. int numpad = 1;    /* default number of pad characters is 1 */
  17.  
  18. main(argc, argv)
  19. int argc;
  20. char *argv[];
  21. {
  22.     int i = 1;
  23.     if (argc == 0) exit(0); /* no workbench */
  24.  
  25.     /* default is stdin and stdout */
  26.     in = stdin;
  27.     out = stdout;
  28.     /* interrogate the command line */
  29.     while (--argc >0)
  30.         {
  31.         if (argv[i][0] == '-')    /* got a switch */
  32.             {
  33.             if (argv[i][1] == 'b') pad = ' ';
  34.             else if (argv[i][1] == '?')
  35.                 {
  36.                 usage();
  37.                 specs();
  38.                 exit(0);
  39.                 }
  40.             else if (isdigit(argv[i][1]))
  41.                 numpad = atoi(&argv[i][1]);
  42.             else {
  43.                 fprintf(stderr,"Marge: invalid switch: %s\n",argv[i]);
  44.                 usage();
  45.                 exit(1);
  46.                 }
  47.             }
  48.         else {
  49.             if (filecnt == 0) /* its input file name */
  50.                 {
  51.                 in = fopen(argv[i],"r");
  52.                 if (!in)
  53.                     {
  54.                     fprintf(stderr,"Marge: Input open failed on %s\n",argv[i]);
  55.                     exit(1);
  56.                     }
  57.                 }
  58.             if (filecnt == 1) /* its output file name */
  59.                 {
  60.                 out = fopen(argv[i],"w");
  61.                 if (!out)
  62.                     {
  63.                     fprintf(stderr,"Marge: Output open failed on %s\n",argv[i]);
  64.                     exit(1);
  65.                     }
  66.                 }
  67.             if (filecnt > 1) /* its too many file names */
  68.                 {
  69.                 fprintf(stderr,"Marge: too many filenames\n");
  70.                 }
  71.             filecnt++;
  72.             }
  73.         i++;
  74.         }
  75.  
  76.     /* Now process the data */
  77.  
  78.     while (fgets(linebuf,500,in) != 0)
  79.         {
  80.         for (i=0; i<numpad; i++) putc(pad,out);
  81.         fputs(linebuf,out);
  82.         }
  83.  
  84.     exit(0);
  85. }
  86.  
  87. usage()
  88. {
  89.     fprintf(stderr,"Usage:marge [-b] [-#] [-?] [infile] [outfile]\n");
  90. }
  91.  
  92. specs()
  93. {
  94.     fprintf(stderr," Add whitespace to front of each line of a file.\n");
  95.     fprintf(stderr," Default is to add 1 tab. Specify file names or\n");
  96.     fprintf(stderr," use stdin/stdout. - Flags:\n");
  97.     fprintf(stderr," -b add blanks instead of tabs\n");
  98.     fprintf(stderr," -# integer number of characters to add\n");
  99.     fprintf(stderr," -? display specifications\n");
  100. }
  101.